//
//  SimpleTest.cpp
//  Editor
//
//  Created by Jeppe Nielsen on 11/22/14.
//  Copyright (c) 2014 Jeppe Nielsen. All rights reserved.
//

#include "Engine.hpp"
#include "GameState.hpp"
#include "OpenGL.hpp"
#include "GameWorld.hpp"
#include "RenderSystem.hpp"

using namespace Nano;

class Test : public GameState<Test> {

    GameWorld world;
    GameObject* cube;

    void Initialize() {
        world.CreateSystem<RenderSystem>();

        GameObject* cameraObject = world.CreateObject();
        cameraObject->AddComponent<Transform>()->Position = {0,0,5};
        cameraObject->AddComponent<Camera>()->Viewport = Manager().Viewport();
        
        Box viewPort = Manager().Viewport();
    
        cube = world.CreateObject();
        cube->AddComponent<Transform>();
        cube->AddComponent<Mesh>()->AddCube(0, 1);
        cube->GetComponent<Mesh>()->AddGeoSphere(1,1,10);
        cube->AddComponent<Material>();
    }
    
    void Update(float dt) {
    static float rot = 0;
        rot += dt;
        cube->GetComponent<Transform>()->Rotation = Quaternion(rot, Vector3(1,1,0).Normalized());
        world.Update(dt);
    }
    
    void Render() {
        glClear(GL_COLOR_BUFFER_BIT);
        world.Render();
    }
};

/*
int main() {
    Engine e;
    e.Start<Test>();
    return 0;
}
*/
